#ifndef PLAYLISTWINDOW_H
#define PLAYLISTWINDOW_H

#include <QWidget>
#include <QListWidget>
#include <QVBoxLayout>
#include <QLabel>
#include <QAction>
#include <QString>
#include <QMenu>
#include "musiccollecteddao.h"
#include <QApplication>


// 独立的播放列表窗口：显示已收藏的歌曲，支持点击播放和删除收藏
class PlayListWindow : public QWidget {
    Q_OBJECT
    
public:
    // 构造函数：初始化窗口布局
    explicit PlayListWindow(QWidget *parent = nullptr) : QWidget(parent) {
        // 设置窗口基本属性
        setWindowTitle("我的收藏列表");
        setMinimumSize(220, 280);
        setStyleSheet("background-color: #ffffff;color:#000000;");  // 背景色
        
        // 标题标签
        QLabel *titleLabel = new QLabel("已收藏歌曲（点击播放）", this);
        titleLabel->setScaledContents(true);
        titleLabel->setStyleSheet("font-size: 16px; font-weight: bold;background-color:#ccebff;"
                                  "border:1px solid #4caf50;border-radius: 5px;padding:4px;");
        
        // 列表控件：显示收藏的歌曲
        listWidget = new QListWidget(this);
        listWidget->setStyleSheet(R"(
            QListWidget {
outline: none;
                background-color: white;
                border: 1px solid #ddd;
                border-radius: 5px;
                padding: 5px;
            }
            QListWidget::item {
                padding: 8px;
                border-bottom: 1px solid #f0f0f0;
            }
            QListWidget::item:hover {
                background-color: #ccebff;
            }
QListWidget::item:selected{
color:#000000;
border:1px solid #ccebff;
border-left: 3px solid #1976D2;
border-radius:3px;
background-color:#ccebff;
}
/* 垂直滚动条样式 */
QScrollBar:vertical {
    border: none;
    background: #F0F0F0;
    width: 12px;
    margin: 0px;
}

QScrollBar::handle:vertical {
    background: #C0C0C0;
    border-radius: 6px;
    min-height: 20px;
}

QScrollBar::handle:vertical:hover {
    background: #0099ff;
}

QScrollBar::add-page:vertical, 
QScrollBar::sub-page:vertical {
    background: #F0F0F0;
}

QScrollBar::add-line:vertical, 
QScrollBar::sub-line:vertical {
    border: none;
    background: none;
    width: 0;
    height: 0;
}

/* 水平滚动条样式 */
QScrollBar:horizontal {
    border: none;
    background: #F0F0F0;
    height: 12px;
    margin: 0px;
}

QScrollBar::handle:horizontal {
    background: #C0C0C0;
    border-radius: 6px;
    min-width: 20px;
}

QScrollBar::handle:horizontal:hover {
    background: #0099ff;
}

QScrollBar::add-page:horizontal, 
QScrollBar::sub-page:horizontal {
    background: #F0F0F0;
}

QScrollBar::add-line:horizontal, 
QScrollBar::sub-line:horizontal {
    border: none;
    background: none;
    width: 0;
    height: 0;
}
)");
        
        // 右键菜单：用于删除收藏
        listWidget->setContextMenuPolicy(Qt::CustomContextMenu);
        connect(listWidget, &QListWidget::customContextMenuRequested,
                this, &PlayListWindow::showContextMenu);
        
        // 主布局
        QVBoxLayout *mainLayout = new QVBoxLayout(this);
        mainLayout->setContentsMargins(1, 1, 1, 1);  // 边距
        mainLayout->addWidget(titleLabel);
        mainLayout->addWidget(listWidget);
        setLayout(mainLayout);
        
        // 点击列表项时发送播放信号
        connect(listWidget, &QListWidget::itemClicked,
                this, [this](QListWidgetItem *item) {
                    int index = listWidget->row(item);
                    emit itemSelected(index);  // 发送选中索引
                });
    }
    
    // 更新列表数据：接收已收藏的歌曲列表并显示
    void updateList(const QList<MusicInfo> &musicList) {
        listWidget->clear();  // 清空现有内容
        collectedMusic = musicList;  // 保存数据用于删除操作
        
        // 添加歌曲到列表
        for (const auto &music : musicList) {
            listWidget->addItem(QString("%1 - %2")
                                    .arg(music.title).arg(music.singer));
        }
    }
    
    QListWidget *getListWidget(){
        return listWidget;
    }
    
signals:
    // 点击列表项时，发送选中的索引（供主窗口播放）
    void itemSelected(int index);
    // 删除收藏时，发送歌曲ID（供主窗口同步到MySQL）
    void removeMusic(const QString &musicId);
    
private slots:
    // 显示右键菜单（删除收藏）
    void showContextMenu(const QPoint &pos) {
        QListWidgetItem *item = listWidget->itemAt(pos);
        if (!item) return;
        
        // 创建菜单
        QMenu menu(this);
        menu.setStyleSheet(R"(
        QMenu::item:selected {
        background-color: #ccebff;
        }
        )");
        QAction *deleteAction = menu.addAction("删除收藏");
        connect(deleteAction, &QAction::triggered, this, [this, item]() {
            int index = listWidget->row(item);
            if (index >= 0 && index < collectedMusic.size()) {
                QString musicId = collectedMusic[index].id;
                emit removeMusic(musicId);  // 发送删除信号
            }
        });
        
        // 在鼠标位置显示菜单
        menu.exec(listWidget->mapToGlobal(pos));
    }
    
private:
    QListWidget *listWidget;       // 显示收藏歌曲的列表
    QList<MusicInfo> collectedMusic;  // 缓存已收藏的歌曲数据（用于删除）
};

#endif // PLAYLISTWINDOW_H
